import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.BevelBorder;

/**
 * Fenêtre permettant de faire une commande
 * 
 * @author H4201
 * 
 */
public class FenetreCommande extends JDialog implements ActionListener {

	/**
	 * ID de la fenêtre
	 */
	private static final long serialVersionUID = 1L;

	/**
	 * Controleur principal
	 */
	private ControleurFenetrePrincipale ctrl;

	/**
	 * Bouton de validation
	 */
	private JButton bValider;

	/**
	 * Champs de texte à remplir
	 */
	private JTextField nbA, nbB, quai;

	/**
	 * Contructeur de la FenetreCommande. Crée et affiche la fenêtre.
	 * 
	 * @param ctrl2
	 *            Controleur principal
	 */
	public FenetreCommande(ControleurFenetrePrincipale ctrl2) {
		ctrl = ctrl2;

		setTitle("Commande");

		JPanel pan = new JPanel(new BorderLayout());
		JPanel panHaut = new JPanel();
		JPanel panBas = new JPanel();

		panHaut.add(new JLabel("Nombre de palettes de A :"));
		nbA = new JTextField(5);
		nbA.setBorder(new javax.swing.border.BevelBorder(BevelBorder.RAISED,
				Color.GRAY, Color.DARK_GRAY));
		panHaut.add(nbA);
		panHaut.add(new JLabel("Nombre de palettes de B :"));
		nbB = new JTextField(5);
		nbB.setBorder(new javax.swing.border.BevelBorder(BevelBorder.RAISED,
				Color.GRAY, Color.DARK_GRAY));
		panHaut.add(nbB);

		panBas.add(new JLabel("Quai d'expédition :"));
		quai = new JTextField(5);
		quai.setBorder(new javax.swing.border.BevelBorder(BevelBorder.RAISED,
				Color.GRAY, Color.DARK_GRAY));
		panBas.add(quai);
		bValider = new JButton("Valider");
		bValider.addActionListener(this);
		bValider.setBorder(new javax.swing.border.BevelBorder(
				BevelBorder.RAISED, Color.GRAY, Color.DARK_GRAY));
		bValider.setPreferredSize(new Dimension(65, 30));
		panBas.add(bValider);

		pan.add(panHaut, BorderLayout.NORTH);
		pan.add(panBas, BorderLayout.SOUTH);
		pan.setBorder(BorderFactory.createCompoundBorder(
				BorderFactory.createEmptyBorder(8, 8, 8, 8), pan.getBorder()));

		setContentPane(pan);
		pack();
		setMinimumSize(getSize());
		setLocationRelativeTo(null);
		setVisible(true);
	}

	/**
	 * Envoie le message de commande à Linux si les champs sont correctement
	 * renseignés, affiche une fenêtre d'erreur sinon.
	 */
	@Override
	public void actionPerformed(ActionEvent arg0) {
		try {
			if (Integer.parseInt(nbA.getText()) >= 0
					&& Integer.parseInt(nbB.getText()) >= 0
					&& Integer.parseInt(quai.getText()) >= 0) {
				ctrl.envoi("108 " + nbA.getText() + " " + nbB.getText() + " "
						+ quai.getText());
			} else {
				throw new Exception();
			}
		} catch (Exception e) {
			JOptionPane
					.showMessageDialog(
							null,
							"Merci de remplir tous les champs avec des valeurs entières positives",
							"Erreur saisie", JOptionPane.OK_OPTION);
		}
	}

	/**
	 * Affiche une fenêtre d'erreur modale en cas de retrait impossible. Ferme
	 * la fenêtre de commande.
	 */
	public void erreurRetrait() {
		JOptionPane.showMessageDialog(null, "Erreur : Commande Impossible",
				"Erreur retrait", JOptionPane.OK_OPTION);
		dispose();
	}

	/**
	 * Affiche une fenêtre modale indiquant que le retrait été réussi. Ferme la
	 * fenêtre de commande.
	 * 
	 * @param string
	 */
	public void retraitReussi(String string) {
		JOptionPane.showMessageDialog(null, string, "Retrait réussi",
				JOptionPane.PLAIN_MESSAGE);
		dispose();
	}

}
